const $ = layui.$;

function escapeHtml(str) {
    if (!str) return ''; // 处理空值
    return str.toString()
        .replace(/&/g, '&amp;')  // 转义 &
        .replace(/</g, '&lt;')   // 转义 <
        .replace(/>/g, '&gt;')   // 转义 >
        .replace(/"/g, '&quot;') // 转义 "
        .replace(/'/g, '&#39;'); // 转义 '
}

// 格式化时间为“xx秒前”
function formatTimeAgo(date) {
    if (!date) return '';
    const now = new Date();
    const seconds = Math.floor((now - date) / 1000);

    if (seconds < 1) {
        return "刚刚";
    }
    if (seconds < 60) {
        return `${seconds} 秒前`;
    }
    const minutes = Math.floor(seconds / 60);
    if (minutes < 60) {
        return `${minutes} 分钟前`;
    }
    const hours = Math.floor(minutes / 60);
    if (hours < 24) {
        return `${hours} 小时前`;
    }
    const days = Math.floor(hours / 24);
    return `${days} 天前`;
}

function senderToEmail(sender) {
    if (typeof sender !== 'string') {
        return []; // 如果输入不是字符串，返回空数组
    }
    sender = sender.trim();

    // 提取所有邮箱地址的正则表达式
    // 先尝试匹配 "Name <email@domain.com>" 格式
    const angleBracketRegex = /<([^>]+)>/g;
    const angleBracketMatches = [...sender.matchAll(angleBracketRegex)];
    const bracketEmails = angleBracketMatches.map(match => match[1].trim());

    // 然后尝试匹配独立的邮箱地址
    // 更严格的邮箱正则表达式
    const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
    const directEmails = [...sender.matchAll(emailRegex)].map(match => match[0]);

    // 合并并去重
    const allEmails = [...new Set([...bracketEmails, ...directEmails])];

    // 过滤掉无效的邮箱（例如包含 @. 的）
    return allEmails.filter(email => /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/.test(email));
}

function formatSender(sender) {
    if (typeof sender !== 'string') {
        return '未知发件人';
    }
    sender = sender.trim();
    
    if (!sender) {
        return '未知发件人';
    }

    // 检查是否整个字符串是单个邮箱格式（纯邮箱或尖括号格式）
    const singleEmailRegex = /^(\s*[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\s*|<\s*([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,})\s*>\s*)$/;
    const singleMatch = sender.match(singleEmailRegex);
    if (singleMatch) {
        // 如果是尖括号格式，返回邮箱部分（去掉尖括号）
        if (singleMatch[2]) {
            return singleMatch[2]; // 返回尖括号内的邮箱
        }
        // 如果是纯邮箱，直接返回
        return sender.trim();
    }

    // 处理带引号的名称格式 "Name" <email@domain.com> -> Name <email@domain.com>
    sender = sender.replace(/"([^"]+)"\s*</g, '$1 <');
    
    // 只替换尖括号内的邮箱，不替换独立的邮箱
    const bracketEmailRegex = /<([^>]+@[^\s>]+)>/g;
    
    return sender.replace(bracketEmailRegex, '<span class="email-sender-email">$1</span>');
}

// 格式化文件大小
function formatFileSize(bytes) {
    if (bytes === 0) return '0 B';
    const k = 1024;
    const sizes = ['B', 'KB', 'MB', 'GB'];
    const i = Math.floor(Math.log(bytes) / Math.log(k));
    return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
}

/**
 * 检测是否在应用模式下运行（PWA或WebView）
 * 优先从localStorage读取配置，其次检测URL参数和环境特征
 * @returns {boolean} 如果在应用模式下运行返回true，否则返回false
 */
function isRunningAsApp() {
    // 优先从localStorage读取配置
    const appModeConfig = localStorage.getItem('app_mode');
    if (appModeConfig === 'true') {
        return true;
    }
    if (appModeConfig === 'false') {
        return false;
    }

    // 如果localStorage中没有配置，则检测环境特征

    // 检测iOS PWA模式
    if (window.navigator.standalone === true) {
        return true;
    }

    // 检测通用PWA standalone模式
    if (window.matchMedia('(display-mode: standalone)').matches) {
        return true;
    }

    // 检测Android WebView
    const ua = navigator.userAgent.toLowerCase();
    if (ua.indexOf('wv') > -1 || ua.indexOf('webview') > -1) {
        return true;
    }

    // 检测常见转应用工具的特征
    if (window.plus || window.api || window.cordova || window.ReactNativeWebView) {
        return true;
    }

    return false;
}

/**
 * 设备检测管理器
 * 统一管理手机端和触摸屏检测，并在页面尺寸改变时自动更新
 */
const DeviceDetector = {
    // 检测结果缓存
    _cache: {
        isMobile: false,
        isTablet: false,
        isPC: false,
        isTouchScreen: false,
        lastUpdate: 0
    },
    
    // 变化回调函数列表
    _callbacks: [],
    
    // 初始化
    init: function() {
        this.detect();
        
        // 监听窗口尺寸变化
        let resizeTimer = null;
        window.addEventListener('resize', () => {
            // 防抖：100ms后才执行检测
            clearTimeout(resizeTimer);
            resizeTimer = setTimeout(() => {
                const oldCache = { ...this._cache };
                this.detect();
                
                // 如果触摸屏状态发生变化，通知回调函数
                if (oldCache.isTouchScreen !== this._cache.isTouchScreen) {
                    this._notifyCallbacks();
                }
                
                console.log('设备检测已更新:', this._cache);
            }, 100);
        });
        
        console.log('设备检测管理器已初始化:', this._cache);
    },
    
    // 注册变化回调
    onChange: function(callback) {
        if (typeof callback === 'function') {
            this._callbacks.push(callback);
        }
    },
    
    // 通知所有回调函数
    _notifyCallbacks: function() {
        this._callbacks.forEach(callback => {
            try {
                callback(this._cache);
            } catch (error) {
                console.error('设备检测回调执行失败:', error);
            }
        });
    },
    
    // 执行检测
    detect: function() {
        const width = window.innerWidth;
        
        // 根据项目规则定义：
        // 手机端：<=1000px
        // 平板：1000px < 宽度 <= 1400px
        // PC：>1400px
        this._cache.isMobile = width <= 1000;
        this._cache.isTablet = width > 1000 && width <= 1400;
        this._cache.isPC = width > 1400;
        
        // 检测触摸屏支持
        this._cache.isTouchScreen = (
            ('ontouchstart' in window) ||
            (navigator.maxTouchPoints > 0) ||
            (navigator.msMaxTouchPoints > 0)
        );
        
        this._cache.lastUpdate = Date.now();
        
        return this._cache;
    },
    
    // 获取检测结果
    isMobile: function() {
        return this._cache.isMobile;
    },
    
    isTablet: function() {
        return this._cache.isTablet;
    },
    
    isPC: function() {
        return this._cache.isPC;
    },
    
    isTouchScreen: function() {
        return this._cache.isTouchScreen;
    },
    
    // 获取完整信息
    getInfo: function() {
        return { ...this._cache };
    }
};

// 页面加载完成后自动初始化
$(document).ready(function() {
    DeviceDetector.init();
});

// 显示浏览器通知
function showNotification(title, options) {
    // 检查浏览器是否支持Notification API
    if (!("Notification" in window)) {
        console.log("此浏览器不支持桌面通知");
        return;
    }

    // 检查通知权限
    if (Notification.permission === "granted") {
        // 如果已授权，则创建通知
        new Notification(title, options);
    } else if (Notification.permission !== "denied") {
        // 否则，请求权限
        Notification.requestPermission().then(function (permission) {
            // 如果用户同意，则创建通知
            if (permission === "granted") {
                new Notification(title, options);
            }
        });
    }
}
